package com.cskaoyan.javase.oop3._2inner._4local._0introduction;

/**
 * 在具体看各项前，仍然是先明确以下：
 *
 *      1.局部内部类是一种比成员内部类更加极致封装思想的体现，成员内部类在成员位置，类中都是可以访问到它的。但是局部内部类一旦出了作用域等就不再生效了。
 *      2.局部内部类的使用会显著增加代码层级，导致代码可读性很变差，所以如无必要不要使用局部内部类。
 *      如果你在局部位置碰到问题，希望有一个对象能够解决问题，需要定义一个类，同时又希望该类不被外界所感知，仅在方法内部生效，就可以使用局部内部类。
 *      补充:
 *          当然，局部内部类在某些时候，还能节省一些代码量，会方便一些。(这一点不是很明显,但是等到使用匿名内部类和Lambda表达式的时候就很明显)
 *
 *
 * 局部内部类是定义在一个方法或者一个作用域里面的类，简单来说，将局部内部类看成是局部变量即可
 *      该类的有效范围仅在作用域内部。（这意味着要创建它的对象，必须在作用域内部创建）
 * 从语法和具体使用上看，局部内部类和成员内部类很相似，有点类似于直接把一个成员内部类放进局部位置，语法是：
 * // 局部位置
 * class Inner{
 * }
 * // 局部位置
 *----------------------
 * 自身特点
 *      1.访问权限修饰符
 *          和局部变量一样,它已经被作用域限制了作用范围,访问权限对它没有意义
 *              反正出了作用域就无法访问
 *              在作用域就能访问
 *          当然局部内部类也没有static修饰,不需要
 *
 *      2.成员特点
 *          它的成员特点和成员内部类一模一样
 *          没有static声明,但是可以定义不触发类加载的全局常量
 *
 *      3.继承与实现
 *          局部内部类普遍的用途就是用来继承和实现外部的类或者接口的
 *          这是它主要的实际用途
 *
 *
 * @since 14:37
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        int a;
    }
}

class EnclosedClazz {

    public void test2(){

    }
    public void test() {
        // 在方法体定义局部内部类
        class Inner {
            int a;
            private int b = 10;
            // static int c;
            // static void test(){}
            // static {}
            static final int D = 20;
            // static final Demo E = new Demo();
        }
    }
}